/**
在一个由 0 和 1 组成的二维矩阵内，找到只包含 1 的最大正方形，并返回其面积。

示例:

输入: 

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/maximal-square
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
func maximalSquare(matrix [][]byte) int {
    if len(matrix) == 0{
        return 0
    }
    m, n,res := len(matrix), len(matrix[0]), 0
    dp := make([][]int,m+1)
    for i:=0;i<m+1;i++{
        dp[i] = make([]int,n+1)
    }
    for i:=1;i<m+1;i++{
        for j:=1;j<n+1;j++{
            if matrix[i-1][j-1] == '1'{
                dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
                res = max(res,dp[i][j] * dp[i][j])
            }
        }
    }
    return res
}
func min(a,b,c int)int{
    if a > b{
        if b < c{
            return b
        }
        return c
    }else{
        if a < c{
            return a
        }
        return c
    }
}
func max(a, b int)int{
    if a > b{
        return a
    }
    return b
}